package com.aliyun.messagemgt.util;

import org.apache.commons.lang3.StringUtils;

/**
 * 根据 Message Type 获取信息
 * 1、2位表示渠道类型，3、4位表示消息类型，5位后表示消息模版
 *
 * @Author: Xiaohang Lv
 * @Date: 2019/6/14 16:20
 */
public class MessageTypeUtil {

    /**
     * 1、2位表示渠道类型
     */
    private static int pushChannelTypeRightIndex = 2;

    /**
     * 3、4位表示消息类型
     */
    private static int messageTypeRightIndex = 4;

    private static String wechatChannelTextCardMsg = "0101";

    /**
     * 获取渠道类型
     * @param messageTypeCode
     * @return
     */
    public static String getPushChannelType(String messageTypeCode) {
        if (StringUtils.isEmpty(messageTypeCode)) {
            return null;
        }

        if (messageTypeCode.length() < pushChannelTypeRightIndex) {
            return null;
        }

        return messageTypeCode.substring(0, pushChannelTypeRightIndex);
    }

    /**
     * 获取消息类型
     * @param messageTypeCode
     * @return
     */
    public static String getMessageType(String messageTypeCode) {
        if (StringUtils.isEmpty(messageTypeCode)) {
            return null;
        }

        if (messageTypeCode.length() < messageTypeRightIndex) {
            return null;
        }

        return messageTypeCode.substring(pushChannelTypeRightIndex, messageTypeRightIndex);
    }

    /**
     * 获取消息模版
     * @param messageTypeCode
     * @return
     */
    public static String getMessageTemplate(String messageTypeCode) {
        if (StringUtils.isEmpty(messageTypeCode)) {
            return null;
        }

        if (messageTypeCode.length() < messageTypeRightIndex + 1) {
            return null;
        }

        return messageTypeCode.substring(messageTypeRightIndex);
    }

    /**
     * 兼容原 int 类型消息类型
     * @return
     */
    public static String generateWechatTextCardMsg() {
        return wechatChannelTextCardMsg;
    }

    /**
     * 兼容旧的 int 类型的 message type
     * @param messageTypeCode
     * @return 返回-1表示获取失败
     */
    public static int getIntMessageType(String messageTypeCode) {
        int result = -1;
        try {
            result = Integer.parseInt(getMessageType(messageTypeCode));
        } catch (Exception e) {
            result = -1;
        }
        return result;
    }
}
